﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tema_IP_BuyCar
{
    class Program
    {
        static void Main(string[] args)
        {
            ///
            /// programul cere utilizatorului sa introduca numele masinii respectiv tipul ei citind datele necesare pt fiecare element
            /// se citeste numele clientului si se adauga masina in lista de masini a acelui client
            ///


            ObjectPool CPool = ObjectPool.Instance();

            //  Client gigel = new Client("a", 123, _coupefactory);

            // Client marinel = new Client("b", 123, _coupefactory);
            //CPool.Store(gigel);

            //CPool.Store(marinel);


            int opt = '0';
            string nume_masina;
            string tip_masina;
            string culoare;
            string transmisie;
            string dotari;
            string motorizare;
            string dimensiuni;
            string nume_client;

            do
            {
                switch (opt)
                {
                    case '0': Console.WriteLine("Optiuni:");
                        Console.WriteLine("1 Adaugare masina");
                        Console.WriteLine("2 Sterge masina");
                        Console.WriteLine("3 Iesire");
                        Console.WriteLine("4 Afisare");

                        opt = Console.Read();
                        break;
                    case '1':
                        Console.ReadLine();
                        Console.WriteLine("Numele masinii este");
                        nume_masina = Console.ReadLine();

                        Console.WriteLine("Tipul masinii este");
                        tip_masina = Console.ReadLine();

                        Console.WriteLine("Culoarea este");
                        culoare = Console.ReadLine();

                        Console.WriteLine("Transmisia este");
                        transmisie = Console.ReadLine();

                        Console.WriteLine("Dotarile sunt");
                        dotari = Console.ReadLine();

                        Console.WriteLine("Motorizarea este");
                        motorizare = Console.ReadLine();

                        Console.WriteLine("Dimensiunile sunt");
                        dimensiuni = Console.ReadLine();

                        Console.WriteLine("Numele clientului este");
                        nume_client = Console.ReadLine();

                        Console.WriteLine("Varsta clientului este");
                        string varsta = Console.ReadLine();

                        AbstractCarFactory _coupefactory = new CoupeFactory();
                        AbstractCarFactory _minifactory = new MiniFactory();
                        AbstractCarFactory _sedanfactory = new SedanFactory();
                        int add_new = 1;
                        if (tip_masina == "coupe")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.add_car(_coupefactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                    add_new = 0;
                                }
                                
                            }
                            if (add_new == 1)
                            {
                                Client c = new Client(nume_client, varsta, _coupefactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                CPool.Store(c);
                            }
                        }
                        if (tip_masina == "mini")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.add_car(_minifactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                    add_new = 0;
                                }
                               
                            }
                            if (add_new == 1)
                            {
                                Client c = new Client(nume_client, varsta, _minifactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                CPool.Store(c);
                            }
                        }
                        if (tip_masina == "sedan")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.add_car(_sedanfactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                    add_new = 0;
                                }
                                
                            }
                            if (add_new == 1)
                            {
                                Client c = new Client(nume_client, varsta, _sedanfactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                CPool.Store(c);
                            }
                        }


                        Console.WriteLine("Optiuni:");
                        Console.WriteLine("1 Adaugare masina");
                        Console.WriteLine("2 Sterge masina");
                        Console.WriteLine("3 Iesire");
                        Console.WriteLine("4 Afisare");

                        opt = Console.Read();

                        break;
                    case '2':
                        Console.ReadLine();
                        Console.WriteLine("Numele masinii este");
                        nume_masina = Console.ReadLine();

                        Console.WriteLine("Tipul masinii este");
                        tip_masina = Console.ReadLine();

                        Console.WriteLine("Culoarea este");
                        culoare = Console.ReadLine();

                        Console.WriteLine("Transmisia este");
                        transmisie = Console.ReadLine();

                        Console.WriteLine("Dotarile sunt");
                        dotari = Console.ReadLine();

                        Console.WriteLine("Motorizarea este");
                        motorizare = Console.ReadLine();

                        Console.WriteLine("Dimensiunile sunt");
                        dimensiuni = Console.ReadLine();

                        Console.WriteLine("Numele clientului este");
                        nume_client = Console.ReadLine();

                        Console.WriteLine("Varsta clientului este");
                        varsta = Console.ReadLine();

                        _coupefactory = new CoupeFactory();
                        _minifactory = new MiniFactory();
                        _sedanfactory = new SedanFactory();

                        if (tip_masina == "coupe")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.remove_car(_coupefactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                }

                            }
                           
                        }

                        if (tip_masina == "mini")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.remove_car(_minifactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                }

                            }

                        }

                        if (tip_masina == "sedan")
                        {
                            foreach (Client t_client in CPool)
                            {
                                if (nume_client == t_client.get_nume())
                                {
                                    t_client.remove_car(_sedanfactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                                }

                            }

                        }

                        /*
                        if (tip_masina == "coupe")
                        {
                            Client c = new Client(nume_client, varsta, _coupefactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                            CPool.Remove(c);
                        }
                        if (tip_masina == "mini")
                        {
                            Client c = new Client(nume_client, varsta, _minifactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                            CPool.Remove(c);
                        }
                        if (tip_masina == "sedan")
                        {
                            Client c = new Client(nume_client, varsta, _sedanfactory, culoare, transmisie, dotari, motorizare, dimensiuni);
                            CPool.Remove(c);
                        }*/



                        Console.WriteLine("Optiuni:");
                        Console.WriteLine("1 Adaugare masina");
                        Console.WriteLine("2 Sterge masina");
                        Console.WriteLine("3 Iesire");
                        Console.WriteLine("4 Afisare");

                        opt = Console.Read();
                        break;
                    case '4':
                        foreach (Client t_client in CPool)
                        {
                            t_client.print_client();
                        }

                        Console.WriteLine("Optiuni:");
                        Console.WriteLine("1 Adaugare masina");
                        Console.WriteLine("2 Sterge masina");
                        Console.WriteLine("3 Iesire");
                        Console.WriteLine("4 Afisare");

                        opt = Console.Read();

                        break;
                    default: opt = Console.Read(); break;
                }

            } while (opt != '3');



        }
    }
}
